//package com.gitee.feizns.web.mvc.advice;
//
//import com.baomidou.mybatisplus.mapper.Condition;
//import com.baomidou.mybatisplus.mapper.Wrapper;
//import com.gitee.feizns.ArrayUtils;
//import com.gitee.feizns.bean.Property;
//import com.gitee.feizns.bean.PropertyUtils;
//import com.gitee.feizns.reflect.ConstructorUtils;
//import com.gitee.feizns.web.dao.ar.AbstractModel;
//import com.gitee.feizns.web.mvc.advice.from.From;
//import org.springframework.core.MethodParameter;
//import org.springframework.http.MediaType;
//import org.springframework.http.server.ServerHttpRequest;
//import org.springframework.http.server.ServerHttpResponse;
//import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
//
//import java.lang.reflect.Array;
//import java.util.List;
//import java.util.Set;
//
///**
// * @author feizns
// * @since 2019/11/8
// */
//public class ResearchResponseBodyAdvice implements ResponseBodyAdvice {
//
//    @Override
//    public boolean supports(MethodParameter returnType, Class converterType) {
//        return true;
//    }
//
//    @Override
//    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
//
//        return null;
//    }
//
//    private void handle(Object obj) {
//        PropertyUtils.rwProps(obj).filter(p -> p.isAnnotationPresent(From.class))
//                .forEach(p -> {
//                    From from = p.getAnnotation(From.class);
//                    Property<Object, Object> byVal = Property.of(p.getTarget(), from.prop());
//                    Object val = byVal.val();
//                    if ( val != null ) {
//                        Class<? extends AbstractModel> value = from.value();
//                        Wrapper con = Condition.create();
//                        Object[] selectVal = ArrayUtils.toArray(val);
//
//                        if ( selectVal.length != 1 )
//                            con.eq(from.by(), selectVal[0]);
//                        else
//                            con.in(from.by(), selectVal);
//
//                        Object ret = ConstructorUtils.newInstance(value).selectObj(from.sel(), con);
//                        if ( ret != null  ) {
//                            if ( ret.getClass() == String.class ) {
//                                Property.of(val, );
//                            }
//                        }
//                    }
//                });
//    }
//
//}
